var app = angular.module('horarioSemestre', []);

app.controller('horarioSemestreController', [ '$scope', function($scope) {
	var horarioCtrl = this;
	this.idCurso = 0;
	this.idSemestre = 0;
	this.cursos = new Cursos();
	this.semestres = [ {
		"codigo" : 0,
		"descricao" : "Selecione o Semestre"
	} ];
	this.curso = {};
	this.semestre = {};
	this.horario = getHorarioVazio();
	this.disciplinasCurso = new Disciplinas(this.curso.codigo);
	this.isInsert = true;
	this.semestresCarregados = false;

	this.carregarInfoCurso = function() {
		this.horario = getHorarioVazio();
		this.disciplinasCurso = new Disciplinas(this.idCurso);
		this.carregarSemestres();
	};

	this.carregarSemestres = function() {
		var idCurso = this.idCurso;

		// Impede de fazer requisição com "Selecione o Curso"
		if (idCurso != 0) {
			showLoading();
			$.ajax({
				url : "${pageContext.request.contextPath}/semestre/getSemestres",
				method : "POST",
				data : {
					"idCurso" : idCurso
				},
				success : function(semestres, textStatus, jqXHR) {

					semestres.splice(0, 0, {
						"codigo" : 0,
						"descricao" : "Selecione o Semestre"
					});
					$(semestres).each(function() {
						setDescricaoSemestre(this);
					});

					$scope.$apply(function() {
						horarioCtrl.semestres = semestres;
						horarioCtrl.semestresCarregados = true;
						horarioCtrl.idSemestre = 0;
					});

					hideLoading();
				},
				error : function(jqXHR, textStatus, errorThrown) {
					hideLoading();
					consoleError("Carregar Semestres", errorThrown);
				}
			});
		} else {
			this.semestresCarregados = false;
			this.idSemestre = 0;

		}

	};

	this.semestreSelecionado = function() {
		return this.idSemestre != 0;
	};

	this.getHorario = function() {
		var idSemestre = this.idSemestre;
		if (idSemestre != undefined && idSemestre != 0) {
			showLoading();
			$.ajax({
				url : "${pageContext.request.contextPath}/semestre/getHorario",
				method : "POST",
				data : {
					"idSemestre" : idSemestre
				},
				success : function(horarioSemestre, textStatus, jqXHR) {

					if (horarioSemestre != "") {
						$scope.$apply(function() {
							horarioCtrl.horario = horarioSemestre;
							horarioCtrl.isInsert = false;
						});
					} else {
						$scope.$apply(function() {
							horarioCtrl.horario = getHorarioVazio();
							horarioCtrl.isInsert = true;
						});
					}

					hideLoading();

				},
				error : function(jqXHR, textStatus, errorThrown) {
					hideLoading();
					consoleError("Carregar Horario Semestre", errorThrown);
				}
			});
		} else {
			this.horario = getHorarioVazio();
		}
	};

	this.persistirHorario = function() {
		if (!horarioCtrl.isInsert) {
			this.updateHorario();
		} else {
			this.insertHorario();
		}
	};

	this.insertHorario = function() {
		showLoading();
		$.ajax({
			url : "${pageContext.request.contextPath}/semestre/insertHorario",
			method : "POST",
			data : {
				"horarioJson" : JSON.stringify(horarioCtrl.horario),
				"idSemestre" : horarioCtrl.idSemestre,
				"idCurso" : horarioCtrl.idCurso
			},
			success : function(data, textStatus, jqXHR) {
				hideLoading();
				if (data == "") {
					horarioCtrl.isInsert = false;
					alert("Horario Salvo com Sucesso!");

				} else {
					alert(data);
				}
			},
			error : function(jqXHR, textStatus, errorThrown) {
				hideLoading();
				consoleError("Insert Horario", errorThrown);
			}
		});

	}

	this.updateHorario = function() {
		showLoading();
		$.ajax({
			url : "${pageContext.request.contextPath}/semestre/updateHorario",
			method : "POST",
			data : {
				"horarioJson" : JSON.stringify(horarioCtrl.horario),
				"idCurso" : horarioCtrl.idCurso
			},
			success : function(data, textStatus, jqXHR) {
				hideLoading();
				if (data == "") {
					alert("Horario Atualizado com Sucesso!");
				} else {
					alert(data);
				}
			},
			error : function(jqXHR, textStatus, errorThrown) {
				hideLoading();
				consoleError("Update Horario", errorThrown);
			}
		});

	}

	this.toggleDisciplina = function(idDisc) {
	// Não faz nada aqui
	}

} ]);

// Carrega as disciplinas do curso num array
Disciplinas = function(idCurso) {
	if (idCurso != undefined && idCurso != 0) {
		var disciplinas = {};
		showLoading();
		$.ajax({
			url : "${pageContext.request.contextPath}/semestre/getDisciplinas",
			method : "POST",
			async : false,
			data : {
				"idCurso" : idCurso
			},
			success : function(data, textStatus, jqXHR) {
				disciplinas = data;
			},
			error : function(jqXHR, textStatus, errorThrown) {
				consoleError("Carregar Disciplinas", errorThrown);
			}
		});
		hideLoading();

		return disciplinas;
	}

};

/* Cursos carregados ao gerar página */
Cursos = function() {
	var cursosSelect = ${cursos};

	cursosSelect.splice(0, 0, {
		"codigo" : 0,
		"nome" : "Selecione o Curso"
	});

	return cursosSelect;
};